# ifndef __RECTANGULO__H_

# define __RECTANGULO__H_

# include "figura.h"

# include "punto.h"

# include <iostream>

# include "linea.h"

using namespace std;

class Rectangulo: public Figura
{
	public:
	
		Rectangulo()
		{
			invX = invY = false;
		};
		
		Rectangulo(Punto a, Punto b):si(a), id(b)
		{
			invX = invY = false;
		};
		
		Rectangulo(const Rectangulo &r):Figura(r), si(r.si), id(r.id), invX(r.invX), invY(r.invY)
		{
		};
		
		~Rectangulo()
		{
			this->si.~Punto(); 
			
			this->id.~Punto();
		};
		
		void trasladar(float, float);
		
		virtual void redimensionar(float, float);
		
		void redimensionar2(float, float);
		
		void normalizaPuntos();
		
		Punto getSi()
		{
			return (si);
		};
		
		Punto getId()
		{
			return (id);
		};
		
		void setSi(Punto a)
		{
			this->si = a;
		}; 
		
		void setId(Punto a)
		{
			this->id = a;
		}; 
		
		void setSup (float f)
		{
			this->si.setY(f);
		}
		
		void setInf (float f)
		{
			this->id.setY(f);
		}
		
		void setIzq (float f)
		{
			this->si.setX(f);
		}
		
		void setDer (float f)
		{
			this->id.setX(f);
		}
		
		virtual Punto supIzq()
		{
			return (si);
		};
		
		virtual Punto infDer()
		{
			return (id);
		};
		
		virtual string Texto(int tab = 0) 
		{
			string ret = "";
			
			for (int i = 0; i < tab; i++) ret += '\t';
			
			ret += "Rectángulo:\n" + si.Texto(tab + 1) + id.Texto(tab + 1);
			
			return ret;
		}; 
		
		virtual bool seleccionar(float x, float y)	
		{
			return ((x >= si.getX()) && (x <= id.getX()) && (y <= si.getY()) && (y >= id.getY()));
		};
		
		virtual bool contenida(Punto, Punto);
		
		virtual Rectangulo* clonar ()
		{
			return (new Rectangulo (*this));
		};
		
		virtual list<Figura*> pintar();
		
	private:
		
		Punto si;
		
		Punto id;
		
		bool invX, invY;
		
		bool signo(float x)
		{
			if (x < 0)
			{
				return false;
			}
			
			else
			{
				return true;
			}
		}
};

#endif
